package com.kingmed.kmss.admin.modules.ums.service;

import cn.dev33.satoken.stp.SaTokenInfo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kingmed.kmss.admin.modules.ums.model.*;
import com.kingmed.kmss.admin.qc.AdminQc;
import com.kingmed.kmss.common.dto.admin.ums.*;

import java.util.List;

/**
 * <p>
 * 后台用户表 服务类
 * </p>
 */
public interface UmsAdminService extends IService<UmsAdmin> {

    UmsAdmin register(AdminRegisterDTO adminRegisterDto);

    SaTokenInfo login(String username, String password);

    LoginUserDTO getAdminDTOByIdInCache(Long id);

    UmsAdmin getAdminByUsername(String username);

    /**
     * 获取用户所有资源权限（包括角色资源和自定义+-资源）
     */
    List<UmsResource> getResourceList(Long userId, Long menuId);

    /**
     * 获取用户所有角色
     */
    List<UmsRole> getRoleList(Long id);

    List<UmsMenu> getMenuList(Long userId);

    Page<AdminDTO> pageDtoList(AdminQc adminQc, Page<UmsAdmin> page);

    List<AdminDTO> queryAll(AdminQc adminQc);

    boolean update(Long id, UmsAdminCreateDTO admin);

    int updatePassword(UpdateAdminPasswordParamDTO updatePasswordParam);

    boolean delete(Long id);

    int updateRole(Long adminId, List<Long> roleIds);

    AdminAuthDTO loginCheck(String username, String password);

    AdminAuthDTO oaLogin(String loginId);

    UmsAdmin selectUserByUsername(String username);

    /**
     * 获取用户对应的组织结构
     */
    List<UmsOrganization> getOrgList(Long adminId);

    boolean create(UmsAdminCreateDTO admin);

    List<AdminDTO> queryByCondition(AdminQc adminQc);

    AdminAuthDTO getAdminByOaLoginId(String oaLoginId);

    List<AdminDTO> queryByCondition(AdminQueryDTO adminQc);

    List<AdminDTO> fuzzyQueryByName(String username);

    List<AdminDTO> fuzzyQueryAllByName(String username);

    AdminAuthDTO loadAdminAuthDtoByUsernameNew(String username);

    /**
     * 根据adminId查询平铺的组织架构（集团，大区，子公司）
     */
    OrganizationTileDTO getGroupRegionBranchByAdminId(Long adminId);

    /**
     * 根据adminId获取全部子公司：有权限看到的所有子公司
     */
    List<OrganizationDTO> getBranchesByAdminId(Long adminId);

    OrganizationTileDTO getOrgTileByAdminId(Long adminId);

}
